The experiments run the real Dex detectors headless, at scale, on synthetic (and optional real) data — to validate them and produce the papers’ figures. The trick that makes it possible: each node’s plain-global DSP collides on shared names, so each runs in its own iframe realm and answers over postMessage.
A spot-check on one file proves little. The experiments push thousands of synthetic patients through the actual shipped DSP — not a reimplementation — to measure how the detectors behave across severity, age, artifact and missingness, and to fit the corrections the papers report.
parseCSV / parseTimestamp / mean / std. So each node loads in its own cohort-harness.html?node=… iframe (one realm, one node), exposing runNode(payload) over postMessage — real DSP, zero global clash.One realm per node, fanned across CPU cores by workers, scored on the main thread. The analysis tools sit on top of the same harness.
The same path every experiment takes: generate, fan out to real DSP, normalize to the bus envelope, fuse, then score or fit.
cohort-gen draws N seeded patients over the parameter space and renders each into the device formats — deterministic, reproducible.
Patients are dispatched to per-kind workers, each driving the node’s real DSP in its own iframe realm. No reimplementation — the shipped detectors run.
Each node returns a minimal ganglior.node-export envelope; the Integrator fuses both kinds’ envelopes per patient on the main thread.
Outputs are diffed against ground truth (regression gate) or fed to a calibration / confound / reliability model, then rendered as figures and exported (CSV/JSON/PNG).
Each tool is a self-contained browser page over the shared harness. The first three feed published drafts; the last is a gate.
Collects {ODI-4, scored AHI} from synthetic, SubjectA and optional real NSRR nights; fits calibration + a corrected surrogate; renders four figures and a closed-form power analysis. Reuses real OxyDex + CpapEdf + the NSRR adapter.
Generates N synthetic patients, measures rMSSD per night via the real PulseDex harness, then quantifies the age confound in a single-metric HRV screen and the AUC recovery from an age-adjustment.
Over the 1–12-night longitudinal lane, measures ODI-4 / rMSSD / CGM-CV per occasion with the real detectors, estimates ICC(1,1) by ANOVA, and applies Spearman–Brown for the minimum reliable recording length per metric.
The harness’s own gate: runs the 5 SubjectA nights through the real OxyDex + PulseDex harness and diffs against committed ground truth, with a headline pass/fail pill. Catches corpus or DSP drift.
The pilot lane itself: generate a cohort, run every patient through the real headless pipeline, fuse in the Integrator, and aggregate — the substrate the analyses build on.
The experiments are powerful because they run the real code — and bounded because most of their data is synthetic. The constraints are deliberate.
Most runs use the synthetic corpus. Real-data validation needs user-supplied NSRR/PhysioNet PSG under a signed DUA — not bundled, not fetchable. The synthetic lane is the scalable pre-check, not the proof.
The per-node iframe realm is not architecture astronautics — it is the only clean way to run colliding plain-global DSP files side by side without editing shipped code (which would trip the gates).
Waveform pipelines (PPG/ECG) are expensive, so the FULL lane runs one representative window per patient and is capped at ≤500 — enough to exercise morphology, not a population study.
When the harness needs something the shipped DSP doesn’t expose, it adapts in the harness layer (e.g. rendering ECG µV from RR) — the regression + provenance gates stay the arbiter of truth.